/**
 *  npm install --save nprogress
 */
import router from './router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import {Message} from 'element-ui'
import {isLogin, hasRole} from "@/utils/foodcircle"
import store from '@/store'

NProgress.configure({showSpinner: false})


router.beforeEach((to, from, next) => {
    NProgress.start()

    let account = store.state.user.account
    let flag = false
    if (!account || account === "") {
        flag = true
    }

    /**
     * 无需权限即可访问
     */
    if (to.meta.auth === "none") {
        /**
         * 当前访问的是公共页面：
         * 如果用户已经登录了，但是没有获取个人信息，那就去获取
         */
        if (isLogin() && flag) {
            store.dispatch('GetInfo').then(() => {
                next()
            })
        } else {
            next()
        }
    } else if (isLogin()) {
        /**
         * 如果访问的页面是需要登录后才能访问的：
         * 如果没有个人信息,则去获取
         */
        if (flag) {
            store.dispatch('GetInfo').then(() => {
                /**
                 * 查看是否有权限访问
                 */
                let has = hasRole(to.meta.roles)
                if (has) {
                    next()
                } else {
                    next({path: "/401"})
                    NProgress.done()
                }
            }).catch(err => {
                store.dispatch('LogOut').then(() => {
                    Message.error("系统繁忙，请重新登录")
                    next({path: `/login?continue_url=${to.fullPath}`})
                })
                NProgress.done()
            })
        } else {
            let has = hasRole(to.meta.roles)
            if (has) {
                next()
            } else {
                next({path: "/401"})
                NProgress.done()
            }
        }
    } else {
        /**
         * 如果没有权限，则前往登录页面
         */
        next(`/login?continue_url=${to.fullPath}`) // 否则全部重定向到登录页
        NProgress.done()
    }
})


router.afterEach((to) => {
    /**
     * 设置标题
     */
    if (to.meta.title) {
        document.title = to.meta.title
    }
    NProgress.done()
})
